<?php namespace Home\Controller;

use Hdphp\Controller\Controller;

class CartController extends Controller{
	
	//购物车主页方法
	public function index(){
		//声明一个空数组 以免遍历的时候报错
		$data = array();
		//如果购物车有数据的话  那$data的值就等于购物车数据
		if(Cart::getAllData()){
			$data = Cart::getAllData();
		}else{
			$data['goods']=array();
		}
		//分配数组
		View::with('data',$data);
		//获得购物车物品的总价 并分配给页面
		$totalPrice = cart::getTotalPrice();
		View::with('totalPrice',$totalPrice);
		View::make();
	}
	
	//ajax方法 处理商品详情页发过来的数据
	public function cartsess(){
		//实例化商品模型  调用方法
		$goodsModel = new \Common\Model\Goods;
		//获得ajax传过来的物品ID
		$gid = Q('post.gid',0,'intval');
		//获得ajax传过来的购物的商品数量
		$goodsCount = Q('post.goodscount',0,'intval');
		//获得ajax传过来的购买的商品规格组合 数组 并转为字符串
		$Combine = implode(',', Q('post.combine'));
		//获得商品表信息
		$goodsData = $goodsModel->where("gid={$gid}")->find();
		//取得商品名称 用于组合数组 调用Cart::add()方法 把数组加入session
		$goodsName = $goodsData['gname'];
		//如果商品是促销的话 商品的基本价就是促销价
		if($goodsData['sale_price'] != 0){
			$basePrice = $goodsData['sale_price'];
			//如果商品不是促销 基本价就是市场价 用于与选择的商品的规格组合附加价格相加
		}else{
			$basePrice = $goodsData['market_price'];
		}
		//获得选中的商品规格的附加价格
		$addPrice = Db::table('goods_attr')->where("gaid in (".$Combine.")")->sum('add_price');
		//商品的单价就等于基本价加上附加价格
		$goodsPrice = $basePrice + $addPrice;
		//取得商品的规格数组
		$goodsspec = Db::table('goods_attr')
					->join('type_attribute','type_attribute_taid','=','taid')
					->where("goods_gid={$gid} AND atype=1 AND gaid in (".$Combine.")")
					->groupBy('taid')
					->lists('taname,gavalue');
		//取得商品的列表图 用于购物车显示
		$listpic = Db::table('goods')->where("gid=$gid")->pluck("listpic");
		//取得选中的商品的货品列表的库存 用于购物车页面判断
		$inv = Db::table('goods_list')->where("combine='$Combine'")->pluck('inventory');
		//组合数组 把数组加入session
		$data = array(
				'id' => $gid,
				'name'=> $goodsName,
				'num'=> $goodsCount,
				'price'=>$goodsPrice,
				'listpic' =>$listpic,
				'inv'=>$inv,
				'options' => $goodsspec
		);
		Cart::add($data);
		//获得购物车商品的数量  用于商品详细页面显示当前购物车有多少件要购买的商品
		$cartGoodsNum = Cart::getTotalNums();
		//ajax返回数据
		$goodsdata = Cart::getAllData();
		$this->ajax($goodsdata);
	}
	//购物车页面删除商品方法
	public function delgoods(){
		//获得ajax传过来的商品唯一的sid
		$sid = Q('post.sid');
		//调用删除方法删除商品
		Cart::del($sid);
		//获得删除购物车商品后购物车现有的商品的总价 并返回到页面
		$totalPrice = cart::getTotalPrice();
		$this->ajax($totalPrice);
	}
	
	//头部购物车删除商品方法
	public function headdelgoods(){
		//获得ajax传过来的商品唯一的sid
		$sid = Q('post.sid');
		//删除对应的购物车商品
		Cart::del($sid);
		//获得当前购物车商品的数量 并返回
		$cartGoodsNum = Cart::getTotalNums();
		$this->ajax($cartGoodsNum);
	}
	//批量删除购物车商品的方法
	public function delmulti(){
		//获得ajax传过来的sid数组
		$sids = Q('post.sid');
		//遍历该数组 $v就是sid
		foreach ($sids as $v) {
			//每遍历一次就删除一次商品
			Cart::del($v);
		}
		//获得购物车现有的商品的总价
		$totalPrice = cart::getTotalPrice();
		//并返回总价 用于页面上显示
		$this->ajax($totalPrice);
	}
	
	//更改购物车商品数量的方法
	public function changenum(){
		//获得要更改的商品现有的数量
		$num = Q('get.num');
		//获得要更改的商品的sid
		$sid = Q('get.sid');
		//获得类型 自定义的 1为减少数量 
		$type = Q('get.type');
		if($type == '1'){
			$num = --$num;
		}else{
			$num = ++$num;
		}
		//组合数组 更新购物车
		$data=array( 
		    'sid'=>"$sid",// 唯一 sid，添加购物车时自动生成 
		    'num'=>$num 
		); 
		//并跳转页面
		Cart::update($data);
		go(U('index'));
	}
} 



 ?>